package com.sinosoft.ptas.service.impl;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

import com.sinosoft.framework.core.common.exception.BusinessException;
import com.sinosoft.framework.core.common.utils.StringUtil;
import com.sinosoft.ptas.control.dto.OrganizationData;
import com.sinosoft.ptas.dao.DefaultTargetMapper;
import com.sinosoft.ptas.entity.DefaultTargetEntity;
import com.sinosoft.ptas.entity.TargetOrgRefEntity;
import com.sinosoft.ptas.service.DefaultTargetService;
import com.sinosoft.ptas.system.commom.CommonConstant;
import com.sinosoft.ptas.system.commom.ExceptionConstant;

/**
 * 
 *默认目标服务接口实现
 */
public class DefaultTargetServiceImpl implements DefaultTargetService {
	
	DefaultTargetMapper defaultTargetMapper;

	
	public void setDefaultTargetMapper(DefaultTargetMapper defaultTargetMapper) {
		this.defaultTargetMapper = defaultTargetMapper;
	}

	
	/**
	 * 添加默认目标
	 * @param defaultTargetEntity
	 */
	public void createDefaultTargets(DefaultTargetEntity defaultTargetEntity)throws BusinessException {
		defaultTargetMapper.createDefaultTargets(defaultTargetEntity);
	}

	/**
	 * 根据默认目标编号更新默认目标
	 * @param defaultTargetEntity
	 */
	public void updateDafaultTargets(DefaultTargetEntity defaultTargetEntity)throws BusinessException {
		defaultTargetMapper.updateDafaultTargets(defaultTargetEntity);
	}

	/**
	 * 根据项目类型编号和目标属性类型查询默认目标 
	 * @return 默认目标实体
	 */
	public List<DefaultTargetEntity> retrieveDefaultTarget() {
		List<DefaultTargetEntity> defaultImplList=new ArrayList<DefaultTargetEntity>();
		String id="";
		defaultImplList=defaultTargetMapper.retrieveDefaultTargetImpl();
		for(int i=0;i<defaultImplList.size();i++){
			id=defaultImplList.get(i).getId();//获实施期目标id
			defaultImplList.get(i).setDefaultTlist(defaultTargetMapper.retrieveDefaultTargetYear(id));//将年度目标放入
		}
		return defaultImplList;
	}

	/**
	 * 添加默认目标
	 * 参数为一个默认目标集合，里面有一个实施期目标和多个年度目标，他们可以根据targetType目标类型来区分
	 * 先添加实施目标，添加成功后在添加年度目标，年度目标中的pid需要自己通过实施目标中的id来添加，实施目标没有父节点，年度目标有父节点
	 * @param defaultTargetList
	 */
	public void createListDefaultTarget(List<DefaultTargetEntity> defaultTargetList)throws BusinessException {
		
		/*DefaultTargetEntity implTarget=new DefaultTargetEntity();//创建一个实体对象用于接收实施期目标
		List<DefaultTargetEntity> yearTargets=new ArrayList<DefaultTargetEntity>();//创建一个实体对象用于接收多个年度目标
		for(int i=0;i<defaultTargetList.size();i++){
			DefaultTargetEntity defaultTargetEntity=new DefaultTargetEntity();
			defaultTargetEntity=defaultTargetList.get(i);//获取单个实体
			if(defaultTargetEntity.getTargetType().equals(CommonConstant.DEFAULTTARGET_IMPL)){
				implTarget=defaultTargetEntity;//存放实施目标
			}
			if(defaultTargetEntity.getTargetType().equals(CommonConstant.DEFAULTTARGET_YEAR)){
				yearTargets.add(defaultTargetEntity);//存放年度目标
			}
		}
		String id=UUID.randomUUID().toString();
		implTarget.setId(id);
		defaultTargetMapper.createDefaultTargets(implTarget);//添加实施期目标
		for(int i=0;i<yearTargets.size();i++){
			DefaultTargetEntity yearTarget=new DefaultTargetEntity();
			yearTarget=yearTargets.get(i);//获取单个年度目标
			yearTarget.setPid(id);//设置pid
			String yid=UUID.randomUUID().toString();
			yearTarget.setId(yid);
		}*/
		defaultTargetMapper.createListDefaultTarget(defaultTargetList);//批量添加年度目标
	}

	/**
	 * 根据默认目标编号删除默认目标
	 * defaultTargetId为必传项如果没有就抛出BusinessException
	 * @param defaultTargetId
	 */
	public void deleteDefaultTarget(String defaultTargetId) {
		defaultTargetMapper.deleteDefaultTarget(defaultTargetId);
	}


	/**
	 * 通过省级用户的组织Id查询实施目标
	 * 通过orgId(省级用户组织id)到目标与组织关系表中查出目标id,接着通过目标id查出对应的目标
	 * @param orgId 省级用户组织id
	 * @return List<DefaultTargetEntity> 默认目标列表
	 */
	public List<DefaultTargetEntity> retrieveDefaultTargetByProOrgId(
			String orgId) {
		if(StringUtil.isBlank(orgId)){
			throw new  BusinessException(ExceptionConstant.ID_NULL_CODE,ExceptionConstant.ID_NULL_MESSAGE);
		}
		return defaultTargetMapper.retrieveDefaultTargetByProOrgId(orgId);
	}

	/**
	 * 通过其他司的组织Id查询实施目标
	 * 通过orgId(其他司用户组织id)到目标属性与组织关系表中查出目标属性id,接着通过目标属性id查出对应的默认目标
	 * @param orgId 其他司组织id
	 * @return List<DefaultTargetEntity> 默认目标列表
	 */
	public List<DefaultTargetEntity> retrieveDefaultTargetByOther(String orgId) {
		if(StringUtil.isBlank(orgId)){
			throw new  BusinessException(ExceptionConstant.ID_NULL_CODE,ExceptionConstant.ID_NULL_MESSAGE);
		}
		return defaultTargetMapper.retrieveDefaultTargetByOther(orgId);
	}

	/**
	 * 批量创建目标和省区域的对应关系  (先删除原有的对应关系,再添加,在更新司局标识)
	 * 目标与省区域的关系是  一对多
	 * @param targetOrgRefEntity
	 * @param targetId
	 * @param orgIds
	 * @throws BusinessException
	 */
	public void createDefaultTargetOrganizationRef (
			TargetOrgRefEntity targetOrgRefEntity, String targetId,
			String[] orgIds) throws BusinessException{
		if(StringUtil.isBlank(targetId)){
			throw new BusinessException(ExceptionConstant.ID_NULL_CODE,ExceptionConstant.ID_NULL_MESSAGE);
		}
		if(orgIds.length!=0){
			defaultTargetMapper.deleteDefaultTargetOrganizationRef(targetId);//删除原有的对应关系
			/*添加新的对应关系*/
			List<TargetOrgRefEntity> targetOrgRefEntitys=new ArrayList<TargetOrgRefEntity>();
			for(int i=0;i<orgIds.length;i++){
				TargetOrgRefEntity targetOrgRefEntity1=new TargetOrgRefEntity();
				targetOrgRefEntity1.setId(UUID.randomUUID().toString());
				targetOrgRefEntity1.setTid(targetId);
				targetOrgRefEntity1.setOid(orgIds[i]);
				targetOrgRefEntity1.setCreater(targetOrgRefEntity.getCreater());
				targetOrgRefEntity1.setCreateTime(targetOrgRefEntity.getCreateTime());
				targetOrgRefEntitys.add(targetOrgRefEntity1);
			}
			defaultTargetMapper.createDefaultTargetOrganizationRef(targetOrgRefEntitys);
			/*String identify=CommonConstant.PROVINCE_IDENTIFY;
			UpdateOrganizationIdentifyData updateOrganizationIdentifyData=new UpdateOrganizationIdentifyData();
			updateOrganizationIdentifyData.setIdentify(identify);
			updateOrganizationIdentifyData.setOrgIds(orgIds);
			defaultTargetMapper.updateOrganizationIdentify(updateOrganizationIdentifyData);*///更新司局标识，使司局变成省司局
		}else{//如果orgIds为空  则删除全部对应关系
			defaultTargetMapper.deleteDefaultTargetOrganizationRef(targetId);
		}
		
	}


	/**
	 * 根据目标编号查询省司局
	 * @param tid
	 * @param identify  0代表省司局,1代表其他司
	 * @return 省司局集合
	 */
	public List<OrganizationData> retrieveOrganizationByTid(String tid,
			String identify) {
		if(StringUtil.isBlank(tid)){	
				throw new BusinessException(ExceptionConstant.ID_NULL_CODE,ExceptionConstant.ID_NULL_MESSAGE);
		}
		identify=CommonConstant.PROVINCE_IDENTIFY;
		return defaultTargetMapper.retrieveOrganizationByTid(tid, identify);
	}

}
